﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using PGI.EN.Usuario;
using PGI.LN.Usuario;
using PGI.LN.TipoUsuario;

namespace PGI.WF
{
    public partial class FrmUsuarioInsertar : Form
    {
        public int EstadoForm = 0;
        public UsuarioEn usuarioForm = null;

        public FrmUsuarioInsertar()
        {
            InitializeComponent();
        }

        private void FrmUsuarioInsertar_Load(object sender, EventArgs e)
        {
            this.cbEstado.DisplayMember = "Text";
            this.cbEstado.ValueMember = "Value";

            var items = new[] { 
                new { Text = "-----------Seleccione-----------", Value = "-1" }, 
                new { Text = "ACTIVO", Value = "1" },
                new { Text = "INACTIVO", Value = "0" }
            };

            this.cbEstado.DataSource = items;

            cbTipoUsuario.DataSource = TipoUsuarioLn.TipoUsuario_Listar();
            cbTipoUsuario.DisplayMember = "Descripcion";
            cbTipoUsuario.ValueMember = "TipoUsuarioID";

            if (EstadoForm == 1) //---- INSERTAR
            {
                this.Text = "Usuario: Agregar";
                cbCambiarPassword.Checked = false;
                cbCambiarPassword.Enabled = false;

                btnAgregar.Width = 120;
                btnAgregar.Image = ilbtnAgregar.Images[0];
                btnAgregar.Text = "Agregar (Enter)";

                cbEstado.SelectedValue = "1";
                cbEstado.Enabled = false;

                cbTipoUsuario.SelectedIndex = 0;
                cbTipoUsuario.Enabled = true;

                txtLogin.Focus();
            }

            if (EstadoForm == 2) //----VER
            {
                this.Text = "Usuario: Ver - ID: " + usuarioForm.UsuarioID + " - " + usuarioForm.Login;
                
                txtLogin.ReadOnly = true;
                txtLogin.Text = usuarioForm.Login;
                txtPassword.ReadOnly = true;
                txtConfirmacion.ReadOnly = true;
                cbCambiarPassword.Checked = false;
                cbCambiarPassword.Enabled = false;

                txtIdentificacion.ReadOnly = true;
                txtIdentificacion.Text = usuarioForm.Identificacion;
                txtNombres.ReadOnly = true;
                txtNombres.Text = usuarioForm.Nombre;
                txtApPaterno.ReadOnly = true;
                txtApPaterno.Text = usuarioForm.ApellidoP;
                txtApMaterno.ReadOnly = true;
                txtApMaterno.Text = usuarioForm.ApellidoM;
                txtTelefono.ReadOnly = true;
                txtTelefono.Text = usuarioForm.Telefono;
                txtCelular.ReadOnly = true;
                txtCelular.Text = usuarioForm.Celular;
                txtCorreo.ReadOnly = true;
                txtCorreo.Text = usuarioForm.Correo;
                txtDireccion.ReadOnly = true;
                txtDireccion.Text = usuarioForm.Direccion;

                cbEstado.SelectedValue = usuarioForm.Estado.ToString();
                cbEstado.Enabled = false;

                cbTipoUsuario.SelectedValue = usuarioForm.TipoUsuarioID;
                cbTipoUsuario.Enabled = false;
                
                btnAgregar.Visible = false;
            }

            if (EstadoForm == 3) //----EDITAR
            {
                this.Text = "Usuario: Editar - ID: " + usuarioForm.UsuarioID + " - " + usuarioForm.Login;

                txtLogin.ReadOnly = true;
                txtLogin.Text = usuarioForm.Login;
                txtPassword.ReadOnly = true;
                txtConfirmacion.ReadOnly = true;
                cbCambiarPassword.Checked = false;
                cbCambiarPassword.Enabled = true;

                txtIdentificacion.Text = usuarioForm.Identificacion;
                txtNombres.Text = usuarioForm.Nombre;
                txtApPaterno.Text = usuarioForm.ApellidoP;
                txtApMaterno.Text = usuarioForm.ApellidoM;
                txtTelefono.Text = usuarioForm.Telefono;
                txtCelular.Text = usuarioForm.Celular;
                txtCorreo.Text = usuarioForm.Correo;
                txtDireccion.Text = usuarioForm.Direccion;

                cbEstado.SelectedValue = usuarioForm.Estado.ToString();
                cbEstado.Enabled = true;

                cbTipoUsuario.SelectedValue = usuarioForm.TipoUsuarioID;
                cbTipoUsuario.Enabled = true;

                btnAgregar.Width = 120;
                btnAgregar.Image = ilbtnAgregar.Images[1];
                btnAgregar.Text = "Editar (Enter)";

                txtNombres.Focus();
            }
        }

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            if (EstadoForm != 2)
            {
                DialogResult dr = MessageBox.Show(this, "¿Desea salir de la ventana sin guardar cambios?", "Pregunta", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (dr == DialogResult.Yes)
                    this.Dispose();
            }
            else
                this.Dispose();
        }

        private void FrmUsuarioInsertar_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
                btnAgregar_Click(sender, e);
            if (e.KeyCode == Keys.Escape)
                btnCerrar_Click(sender, e);
        }

        private bool ValidarFormulario() //TRUE: DEJA PASAR, FALSE: NO DEJA PASAR
        {
            string error = "";
            if (txtLogin.Text == "")
                error += "- Debe ingresar el login. \n";
            if (EstadoForm == 1 || (EstadoForm == 3 && cbCambiarPassword.Checked))
            {
                if (txtPassword.Text == "")
                    error += "- Debe ingresar el password. \n";
                if (txtConfirmacion.Text == "")
                    error += "- Debe ingresar el password de confirmación. \n";
                if (txtPassword.Text != txtConfirmacion.Text)
                    error += "- El password y la confirmación deben coincidir. \n";
            }
            if (txtNombres.Text == "")
                error += "- Debe ingresar el nombre del usuario. \n";
            if (txtApPaterno.Text == "")
                error += "- Debe ingresar el apellido paterno. \n"; 
            if (txtIdentificacion.Text == "")
                error += "- Debe ingresar la identificación. \n";
            if (txtCelular.Text == "")
                error += "- Debe ingresar el celular. \n";
            if (txtCorreo.Text == "")
                error += "- Debe ingresar el correo. \n";
            if (cbEstado.SelectedValue.ToString() == "-1")
                error += "- Debe seleccionar un estado. \n";
            if (cbTipoUsuario.SelectedValue.ToString() == "0")
                error += "- Debe seleccionar un tipo de usuario. \n";

            if (error == "")
                return true;
            else
            {
                MessageBox.Show(this, error, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }

        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            if (ValidarFormulario())
            {
                if (EstadoForm == 1)
                {
                    DialogResult dr = MessageBox.Show(this, "¿Desea agregar el nuevo usuario: " + txtLogin.Text + "?", "Pregunta:", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (dr == DialogResult.Yes)
                    {
                        UsuarioEn usuario = new UsuarioEn();
                        usuario.Login = txtLogin.Text;
                        usuario.Password = txtPassword.Text;
                        usuario.Identificacion = txtIdentificacion.Text;
                        usuario.Nombre = txtNombres.Text;
                        usuario.ApellidoP = txtApPaterno.Text;
                        usuario.ApellidoM = txtApMaterno.Text;
                        usuario.Telefono = txtTelefono.Text;
                        usuario.Celular = txtCelular.Text;
                        usuario.Correo = txtCorreo.Text;
                        usuario.Direccion = txtDireccion.Text;
                        usuario.Estado = Convert.ToInt32(cbEstado.SelectedValue);
                        usuario.TipoUsuarioID = Convert.ToInt32(cbTipoUsuario.SelectedValue);

                        int respuesta = UsuarioLn.Usuario_Insertar(usuario);

                        if (respuesta > 0)
                        {
                            MessageBox.Show(this, "Se guardó correctamente el usuario: (" + respuesta + ") "+ txtLogin.Text, "INFORMACIÓN", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            this.Dispose();
                        }

                        if (respuesta == -1)
                        {
                            MessageBox.Show(this, "Se generó un error al intentar almacenar la información del usuario", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            this.Dispose();
                        }

                        if (respuesta == -2)
                            MessageBox.Show(this, "Ya existe en la base de datos el usuario: " + txtLogin.Text, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                if (EstadoForm == 3)
                {
                    DialogResult dr = MessageBox.Show(this, "¿Desea editar el usuario: " + txtLogin.Text + "?", "PREGUNTA", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (dr == DialogResult.Yes)
                    {
                        UsuarioEn usuario = new UsuarioEn();
                        usuario.UsuarioID = usuarioForm.UsuarioID;
                        usuario.Login = txtLogin.Text;
                        usuario.Password = txtPassword.Text;
                        usuario.Identificacion = txtIdentificacion.Text;
                        usuario.Nombre = txtNombres.Text;
                        usuario.ApellidoP = txtApPaterno.Text;
                        usuario.ApellidoM = txtApMaterno.Text;
                        usuario.Telefono = txtTelefono.Text;
                        usuario.Celular = txtCelular.Text;
                        usuario.Correo = txtCorreo.Text;
                        usuario.Direccion = txtDireccion.Text;
                        usuario.Estado = Convert.ToInt32(cbEstado.SelectedValue);
                        usuario.TipoUsuarioID = Convert.ToInt32(cbTipoUsuario.SelectedValue);

                        int respuesta = UsuarioLn.Usuario_Editar(usuario, cbCambiarPassword.Checked);

                        if (respuesta > 0)
                        {
                            MessageBox.Show(this, "Se actualizó correctamente el usuario: " + txtLogin.Text, "INFORMACIÓN", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            this.Dispose();
                        }

                        if (respuesta == -1)
                        {
                            MessageBox.Show(this, "Se generó un error al intentar almacenar la información del usuario", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            this.Dispose();
                        }

                        
                    }
                }
            }
        }

        private void cbCambiarPassword_CheckedChanged(object sender, EventArgs e)
        {
            if (cbCambiarPassword.Checked == true)
            {
                txtPassword.ReadOnly = false;
                txtConfirmacion.ReadOnly = false;
                txtPassword.Focus();
            }
            if (cbCambiarPassword.Checked == false)
            {
                txtPassword.ReadOnly = true;
                txtConfirmacion.ReadOnly = true;
                txtPassword.Clear();
                txtConfirmacion.Clear();
            }
        }

        private void FrmUsuarioInsertar_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (!this.IsDisposed)
            {
                if (EstadoForm != 2)
                {
                    DialogResult dr = MessageBox.Show(this, "¿Desea salir de la ventana sin guardar cambios?", "Pregunta", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (dr == DialogResult.Yes)
                        this.Dispose();
                    else
                        e.Cancel = true;
                }
                else
                    this.Dispose();
            }
        }

        

        

    }
}
